package gov.pr.celepar.sentinela.admin.action.consultas;

import gov.pr.celepar.framework.util.Data;
import gov.pr.celepar.framework.util.Pagina;
import gov.pr.celepar.sentinela.admin.action.BaseAction;
import gov.pr.celepar.sentinela.admin.excecao.SentinelaServerException;
import gov.pr.celepar.sentinela.admin.facade.LogAcessoFacade;
import gov.pr.celepar.sentinela.admin.facade.SistemaFacade;
import gov.pr.celepar.sentinela.admin.form.consultas.AcessosUsuarioReportForm;
import gov.pr.celepar.sentinela.admin.pojo.LogAcesso;
import gov.pr.celepar.sentinela.admin.pojo.Sistema;

import java.util.Collection;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class AcessosUsuarioReportAction extends BaseAction {

	private static Log logger = LogFactory
			.getLog(AtivacaoAuditoriaReportAction.class);

	public String executar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		AcessosUsuarioReportForm hauform = (AcessosUsuarioReportForm) form;

		if (hauform.getCodUsuario() != null
				&& !hauform.getCodUsuario().equals("")) {
			Long codUsuario = Long.parseLong(hauform.getCodUsuario());
			Collection<Sistema> sistemasUsuario = SistemaFacade
					.listarSistemasAutorizadosByUsuario(codUsuario);

			request.setAttribute("listaSistemas", sistemasUsuario);
		}
		// ********************************************************************************************************************
		if (hauform.getAcao() != null && hauform.getAcao().equals("pesquisar")) {
			logger.debug("Pegando informações da consulta");

			// uso o mesmo método de auditoria que já esá preparado para fazer
			// a consulta
			// certa ignorando as datas e o grupo, caso esses sejam NULOS

			Long codSistema = hauform.getCodSistema() != null
					&& !hauform.getCodSistema().equals("") ? Long
					.decode(hauform.getCodSistema()) : null;
			Long codUsuario = hauform.getCodUsuario() != null
					&& !hauform.getCodUsuario().equals("") ? Long
					.decode(hauform.getCodUsuario()) : null;
			Integer limite = Integer.decode(hauform.getLimite());
			Date dataInicial = Data.formataData(hauform.getDataInicial());
			Date dataFinal = Data.formataData(hauform.getDataFinal());
			if (dataFinal != null)
				dataFinal = Data.addDias(1, dataFinal);

			Integer indicePagina = new Integer(
					hauform.getIndice() == null ? "1" : hauform.getIndice());

			Collection<LogAcesso> acessos = LogAcessoFacade.listarAcessos(
					codSistema, null, codUsuario, dataInicial, dataFinal,
					limite);

			if (acessos != null && !acessos.isEmpty()) {
				Integer totalRegistros = new Integer(acessos.size());
				Pagina pagina = new Pagina(totalRegistros, indicePagina,
						totalRegistros);
				pagina.setRegistros(acessos);

				request.setAttribute("pagina", pagina); // preenche a página, se
				// a página estiver
				// preenchida, o JSP vai
				// desenhar o resultado

			} else {
				throw new SentinelaServerException(
						"Nenhum registro encontrado! ");
			}
		}

		return "hist_acesso_usuario";
	}
}
